package com.example.amazing_wangjj.assiatant;

import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.spring.AiService;
import reactor.core.publisher.Flux;


import static dev.langchain4j.service.spring.AiServiceWiringMode.EXPLICIT;

/**
 * 智能体
 */
@AiService(
        wiringMode = EXPLICIT,
//如果使用流式大模型，则原大模型不用了        chatModel = "qwenChatModel", //绑定提供的大模型
        chatMemoryProvider = "chatMemoryProviderByMongodb", //绑定提供的记忆区提供者
        tools = {"appointmenTools","sealSampleTools"},
//        contentRetriever = "contentRetriever" //绑定提供的简单内容检索器RAG，通过将文档上传到向量数据库中，然后使用向量数据库来检索文档。这个过程完全由大模型来完成，不需要人工干预。
        contentRetriever = "contentRetrieverfinally",//绑定提供的Pinecone内容检索器RAG，通过将文档上传到向量数据库中，然后使用向量数据库来检索文档。这个过程完全由大模型来完成，不需要人工干预。
        streamingChatModel = "qwenStreamingChatModel" //绑定提供的流式大模型
)

public interface AmazingWJJ {
    //测试：导入文件作为提示词，调教大模型为特定身份
    @SystemMessage(fromResource = "tishici.txt")
    //Flux<String>流式web输出
    Flux<String> chat(@MemoryId Long memoryId, @UserMessage String userMessage);

}
